package add_$14_LinesSynchronized;

/*

运行结果：
全是同一线程的输出
对运行结果的分析：因为被synchronized修饰的方法在某一时刻只允许一个线程访问，访问该方法的其它线程都会发生阻塞，
直到当前线程访问完毕，其它线程才有机会执行该方法。一个线程访问的同步方法还没执行完，其它线程就无法访问。故同一
线程卖出了所有的票

 */

public class SynchronizedMethod {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SaleThread2 saleThread = new SaleThread2(); //创建SaleThread对象
        //创建并开启4个线程
        new Thread (saleThread, "线程一").start();
        new Thread (saleThread, "线程二").start();
        new Thread (saleThread, "线程三").start();
        new Thread (saleThread, "线程四").start();
    }

}
class SaleThread2 implements Runnable {
    private int ticket = 100; //十张票
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(true) {
            saleTicket();
            if (ticket <= 0) {
                break;
            }
        }
    }
    //定义同步方法
    private synchronized void saleTicket() {
        // TODO Auto-generated method stub
        if (ticket > 0) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "---卖出的票号为：" + ticket--);
        }
    }
}